package red.mlz.module.module.smstask.mapper;

import red.mlz.module.module.smstask.entity.SmsTask;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface SmsTaskMapper {

    @Select("select * from sms_task WHERE status = #{status} AND is_deleted=0 LIMIT #{limit} OFFSET #{offset}")
    List<SmsTask> findByStatusWithPaging(@Param("status") Integer status,
                                         @Param("offset") int offset,
                                         @Param("limit") int limit);

    @Update("update sms_task set retry_count = #{retryCount}, update_time = #{updateTime} WHERE sms_task_id = #{id}")
    void updateRetryCount(@Param("id") Long id,
                          @Param("retryCount") int retryCount,
                          @Param("updateTime") Integer updateTime);

    //乐观锁异步发送
    int updateStatusWithOptimisticLock(
            @Param("id") Long id,
            @Param("oldStatus") Integer oldStatus,
            @Param("newStatus") Integer newStatus,
            @Param("updateTime") Integer updateTime
    );

    // 根据ID查询操作
    @Select("select * from sms_task WHERE sms_task_id =  #{smsTaskId} AND is_deleted=0")
    SmsTask getById(Long sms_taskId);

    // 根据ID提取操作
    @Select("select * from sms_task WHERE sms_task_id =  #{smsTaskId}")
    SmsTask extractById(Long sms_taskId);

    // 插入操作
    Integer insert(SmsTask sms_task);

    // 更新操作
    Integer update(SmsTask sms_task);

    // 删除操作
    @Update("update sms_task set update_time = #{updateTime} , is_deleted = 1 WHERE sms_task_id = #{smsTaskId}")
    Integer delete(@Param("updateTime") Integer updateTime, @Param("sms_taskId")  Long sms_taskId);

    // 根据状态查询任务
    @Select("select * from sms_task WHERE status = #{status} AND is_deleted=0")
    List<SmsTask> findByStatus(Integer status);

    // 更新任务状态
    @Update("update sms_task set status = #{status}, update_time = #{updateTime} WHERE id = #{id}")
    void updateStatus(Long id, int status, Integer updateTime);
}


